package cn.openea.perpartner.meily.web.service;

import cn.openea.perpartner.common.core.web.domain.AjaxResult;
import cn.openea.perpartner.meily.web.entity.PersonalInfo;
import cn.openea.perpartner.meily.web.entity.dto.SearchDto;
import cn.openea.perpartner.meily.web.entity.vo.PersonalInfoSearchVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * (PersonalInfo)表服务接口
 *
 * @author rains
 * @since 2023-03-07 15:39
 */
public interface IPersonalInfoService extends IService<PersonalInfo> {

    /**
     * 获取个人资料
     * @param object 用户id或记录唯一id
     * @return 查询结果
     */
    AjaxResult getPersonalInfo(JSONObject object);

    /**
     * 更新个人资料
     * 说明：包含新增、修改
     * @param personalInfo 实例对象
     * @return 更新结果
     */
    AjaxResult update(PersonalInfo personalInfo);

    /**
     * 获取个人资料列表---分页
     * @param searchDto 实例对象
     * @return 查询结果
     */
    List<PersonalInfo> getPersonalInfoList(SearchDto searchDto);

    /**
     * 【测评】获取热门测评师
     * @return 查询结果
     */
    AjaxResult getPopularEvaluators();

    /**
     * 【测评】获取测评师---换一批
     * @param object count需要获取多少条数据
     * @return 查询结果
     */
    AjaxResult changeEvaluators(JSONObject object);

    /**
     * 【测评】获取测评师列表
     * 换一批、更多
     * @return 查询结果
     */
    List<PersonalInfo> getEvaluatorsList(JSONObject object);

    /**
     * 【测评】校验测评师资料是否填写完毕
     * @param object 用户id
     * @return 查询结果
     */
    AjaxResult CheckEvaluatorInfo(JSONObject object);

    /**
     * 【线上服务商】校验资料线上服务商是否填写完毕
     * @param object 用户id
     * @return 查询结果
     */
    AjaxResult checkProviderInfo(JSONObject object);

    /**
     * 根据用户id修改测评师等级
     * @param object 用户id、测评师等级
     */
    AjaxResult updateEvaluationGradeByUserId(JSONObject object);

    /** ********************* 以下是后台管理用到的 ******************************* */
    /**
     * 根据用户id获取个人资料
     * @param userId 用户id或记录唯一id
     * @return 查询结果
     */
    PersonalInfo getPersonalInfoByUserId(String userId);

    List<PersonalInfo> getListBySearchVo(PersonalInfoSearchVo searchVo);

    List<PersonalInfo> getList(PersonalInfoSearchVo searchVo);

    List<PersonalInfo> findByIds(List<String> ids);

    AjaxResult editEvaluationGrade(List<String> ids, String evaluationGrade);

    PersonalInfo selectByUserId(String userId);

    /**
     * 校验测评师资料是否填写完整
     */
    Boolean checkEvaluatorInfoFinish(String userId);
}
